package fr.generali.accueilclient.gwt.client.ui.components.tooltip;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOverEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasHTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.Widget;

/**
 *
 * Un {@link Tooltip} est consitué d'une {@link Image} et d'un {@link PopupPanel}.<br>
 * La popup s'affiche au survol de l'image et disparait lorsque le pointeur de la souris s'en éloigne.<br>
 * Il est possible d'injecter le contenu Html à insérer dans la popup.
 *
 */
public class Tooltip extends Composite implements HasHTML {

    private static TooltipUiBinder uiBinder = GWT.create(TooltipUiBinder.class);

    interface TooltipUiBinder extends UiBinder<Widget, Tooltip> {
    }

    @UiField
    Resources res;
    
    /** L'image déclenchant l'affichage de la popup */
    @UiField
    Image tooltipPicto;
    
    /** La popup qui apparait / disparait */
    @UiField
    TooltipPopupPanel tooltipPopupPanel;
    
    public Tooltip() {
        initWidget(uiBinder.createAndBindUi(this));
        res.style().ensureInjected();
    }

    /**
     * Handler permettant d'intercepter les passages de la souris sur l'image.<br>
     * On détecte la position de l'image dans la page, puis on affiche la popup<br>
     * à cette position.<br>
     * @param event
     */
    @UiHandler("tooltipPicto")
    void handleMouseover(MouseOverEvent event){
        Widget source = (Widget) event.getSource();
        int left = source.getAbsoluteLeft() + 10;
        int top = source.getAbsoluteTop() + 10;
        tooltipPopupPanel.setPopupPosition(left, top);
        tooltipPopupPanel.show();
        tooltipPopupPanel.setVisible(true);
    }
    
    /**
     * Handler permettant de détecter lorsque la souris sort de l'image.<br>
     * On masque la popup.<br>
     * @param event
     */
    @UiHandler("tooltipPicto")
    void handleMouseover(MouseOutEvent event){
        tooltipPopupPanel.hide();
    }

    @Override
    public String getHTML() {
        return tooltipPopupPanel.getHTML();
    }

    @Override
    public void setHTML(String html) {
        tooltipPopupPanel.setHTML(html);
    }

    @Override
    public String getText() {
        return getHTML();
    }

    @Override
    public void setText(String text) {
        setHTML(text);
    }
}
